# 函数存在的意义：
"""
为了让代码变得整洁一点
让需要反复执行的代码，调用变的简单化，不需要写那么多冗余的代码
"""

"""
函数一定要先定义后使用
其实不单单函数，其他的像是变量，也需要先定义好，再去用

只有调用了函数，它才会被执行
"""
# t()
# c()
# =====================函数一：有形参无返回======================
def eat(type:str):
    """
    :param type: 就是一个形式参数，简称：形参
    :return:
    """
    if type == "1":
        print("吃汉堡")
    elif type == "2":
        print("吃鸡公煲")
    elif type == '3':
        print("吃雪糕")
# 调用函数
# eat("1")
# 输出打印下函数的返回值
# print(eat("1"))
"""
吃汉堡
None
"""
#=====================函数二：有形参有返回======================
def eat2(type:int)->str:
    if type==1:
        return "吃汉堡"
        # print("吃汉堡啦啦啦")
    elif type ==2:
        return "吃雪糕"
    elif type ==3:
        return "吃鸡公煲"
# 调用eat2函数
# print(eat2(1)) # 1就是实际参数，简称：实参
"""
【有return注意事项】
1  当函数里面出现了return，就表示是这个方法的返回值
2  一个函数只能有一个return
3  出现return后，后续的代码块不会被执行
"""
#=====================函数三：无形参无返回======================
def t():
    tianqi = input("请输入当天的天气：")
    if tianqi =="晴天":
        print("我们一起出去玩")
    elif tianqi == "阴天":
        print("记得出们带伞")
    elif tianqi == "雷雨":
        print("记得出门带上张鑫")
def c():
    f = input("今天出去吃什么：请输入")
    if f == "汉堡":
        print("去吃肯德基")
    elif f=="鸡公煲":
        print("张鑫会做，去他家吃")

# 多个形参的函数
def info(name,age,sex):
    print(f"大家好，我叫做：{name}，今年：{age}，性别为：{sex}")

# 多个形参时，指定参数传递
# info(sex="男",age=19,name='张三')

# 不指定传参，按照定义好的顺序传入
# info("李四",19,'男')

# 函数默认值参数
def student(name,age,address='沈阳'):
    print(f"大家好，我叫做：{name}，今年：{age}岁，来自：{address}")

# address没有传递，默认是：沈阳
# student("李四",19)

# 传递了address参数，会将默认值替换
# student("张鑫",95,"辽宁锦州")
"""
有多个形参，并且还有默认值参数的情况下
把默认值参数放到最后面：
def demo(a,b,c='沈阳'):
    pass
"""

# 不定长参数和不定长关键字参数
def info2(*args,**kwargs):
    """
    :param args: 接受不定长的参数，返回的是一个元组
    :param kwargs: 接受不定长的关键字参数，返回的是一个字典
    :return:
    """
    print(args)
    print(kwargs)

# 调用info2函数
# info2(123,12,123,12,42,41,2,"小阿三的",'asdasd',[1,2,3],(1,2,3),{23,23,123},{"name":"suki"},年龄=19,name="李四")
"""
(123,12,123,12,42,41,2,"小阿三的",'asdasd',[1,2,3],(1,2,3),{23,23,123},{"name":"suki"})
{"name":"李四"}
"""
# 当一个方法出现了形参，不定长参数，不定长关键字参数，默认值参数
def info3(name,address='沈阳',*张鑫,**张鑫2):
    print(name)
    print(address)
    print(张鑫)
    print(张鑫2)
info3("张鑫","asd",123,345345,324,523,423,[11,22,33],names="李四",age=19)
"""
张鑫
asd
(123,345345,324,523,423,[11,22,33])
{'names': '李四', 'age': 19}
"""

























